package controlLayer;
import ExceptionsPakke.*;

import java.util.ArrayList;

import modelLayer.Kunde;
import modelLayer.AdresseBog;

/**
 * Kontroller klasse for AdresseBogCTR.
 * 
 * @author Gruppe 2 
 * @version 1.0
 */
public class AdresseBogCTR
{

    private AdresseBog ab;

    /**
     * Konstruktøren for klassen AdresseBogCTR.
     */
    public AdresseBogCTR()
    {
        ab = AdresseBog.getInstance();
    }

    /**
     * Denne metode opretter et objekt af Kunde.
     * Derefter tilføjes objektet af Kunde i objektet af AdresseBog.
     * @param String cprNr
     * @param String navn
     * @param String adresse
     * @param int postNr
     * @param String by
     * @param String telefon
     */
    public void opretKunde(String cprNr, String navn, String adresse, int postNr, String by, String telefon) throws NullValueException
    {
    	if(cprNr != null && navn != null && adresse != null && postNr != 0 && by != null && telefon != null && cprNr.trim().length() != 0 && navn.trim().length() != 0 && adresse.trim().length() != 0 && by.trim().length() != 0 && telefon.trim().length() != 0)
        {
    		Kunde k = new Kunde(cprNr, navn, adresse, postNr, by, telefon);
    		ab.addKunde(k);
        }
    	else
    	{
    		throw new NullValueException("Nogle af tekstfelterne er ikke udfyldte, husk nul er ikke et accepteret tal.");
    	}
    }

    /**
     * Denne metode finder et objekt af Kunde i objektet af AdresseBog.
     * @param String cprNr
     * @return String cprNr
     */
    public Kunde findKunde(String cprNr)
    		throws NoSuchKundeException, NullValueException
    {
    	if(cprNr != null && cprNr.trim().length() != 0)
    	{
    		if(ab.findKunde(cprNr) != null)
    		{
    			return ab.findKunde(cprNr);
    		}
    		else
    		{
    			throw new NoSuchKundeException("Kunden findes ikke");
    		}
    	}
    	else
    	{
    		throw new NullValueException("Nogle af tekstfelterne er ikke udfyldte, husk nul er ikke et accepteret tal.");
    	}
    }
    
    public ArrayList<String> kundeInfo(String cprNr)
    		throws NoSuchKundeException, NullValueException
    {
    	ArrayList<String> kunde = new ArrayList<String>();
    	if(cprNr != null && cprNr.trim().length() != 0)
    	{
    		Kunde k = ab.findKunde(cprNr);
    		if(k!=null)
    		{
    			kunde.add("\n");
    			kunde.add("Cpr-nr: "+k.getCprNr().replaceAll("[^\\w]", "")+"\n");
    			kunde.add("Navn: "+k.getNavn().replaceAll("[^\\w]", "")+"\n");
    			kunde.add("Adresse: "+k.getAdresse().replaceAll("[^\\w]", "")+"\n");
    			kunde.add("Postnr: "+Integer.toString(k.getPostNr()).replaceAll("[^\\w]", "")+"\n");
    			kunde.add("By: "+k.getBy().replaceAll("[^\\w]", "")+"\n");
    			kunde.add("Telefon:"+k.getTelefon().replaceAll("[^\\w]", "")+"\n");
     
    		}
    		else
    		{
    			throw new NoSuchKundeException("Kunde findes ikke");
    		}
    	}
    	else
    	{
    		throw new NullValueException("Nogle af tekstfelterne er ikke udfyldte, husk nul er ikke et accepteret tal.");
    	}
     
     return kunde;
    }

    /**
     * Denne metode opdaterer et objekt af Kunde i objektet af AdresseBog.
     * @param String cprNr
     * @param String navn
     * @param String adresse
     * @param int postNr
     * @param String by
     * @param String telefon
     */
    public void opdaterKunde(String cprNr, String nyCprNr, String navn, String adresse, int postNr, String by, String telefon)
    throws NoSuchKundeException, NullValueException
    {
    	if(cprNr != null && nyCprNr != null && navn != null && adresse != null && postNr != 0 && by != null && telefon != null &&
    			cprNr.trim().length() != 0 && nyCprNr.trim().length() != 0 && navn.trim().length() != 0 && adresse.trim().length() != 0 &&  by.trim().length() != 0 
    			&& telefon.trim().length() != 0)
    	{
        ab.opdaterKunde(cprNr, nyCprNr, navn, adresse, postNr, by, telefon);
    	}
    	else
    	{
    		throw new NullValueException("Nogle af tekstfelterne er ikke udfyldte, husk nul er ikke et accepteret tal.");
    	}
    }

    /**
     * Denne metode Sletter et objekt af Kunde i objektet af AdresseBog.
     * @param String cprNr
     */
    public void sletKunde(String cprNr) throws NoSuchKundeException, NullValueException
    {
    	if(cprNr != null && cprNr.trim().length() != 0)
    	{
        ab.sletKunde(cprNr);
    	}
    	else
    	{
    		throw new NullValueException("Nogle af tekstfelterne er ikke udfyldte, husk nul er ikke et accepteret tal.");
    	}
    }

    /**
     * Denne metode printer alle objekter af Kunde objektet af AdresseBog.
     * @return ArrayList<String>
     */
    public ArrayList<String> printAdressebog()
    {
        return ab.printAdresseBog();
    }
}
